package testPackage.testPackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * step by step 06 XPath定位器
 * 基本语法：//tag[@atrributeName = 'attributeValues']  --选择的属性要唯一
 * '/'和'//' --单斜杠和双斜杠用于创建绝对Xpath和相对XPath
 * 单斜杠用于从根节点开始选择，双斜杠用于获取与所选内容匹配的当前节点。
 * 标签--HTML中的标签以“<”开始，以“>”结束。这些用于封装不同的元素并提供
 * 有关元素处理的信息。如：div，input等。
 * 属性--属性定义HTML元素所拥有的属性。如：id，class，dir等
 * AttributeValue--属性的值。
 * XPath表达方式：
 * 绝对路径：以/或根节点开始
 * 相对路径：以//开头，可以在符合选择条件的任何位置选择元素，
 * 不必从根节点开始。
 * 使用XPath查找动态元素的方法：
 * 1、使用text() 根据文字上方的元素来定位元素
 * //*[text() = '在 Google 上搜索，或者输入一个网址']
 *     *用来匹配任何带有所需文字的标签
 * 2、使用contains() 匹配部分匹配属性的值。 可用于定位某些部分保持恒定的动态值。
 * //div [contains](@id,'sb')]   匹配id的部分属性值为'sb'
 * 3、使用元素的索引 通过在方括号中提供索引的位置，可以移动到满足条件的第n个元素。
 * //div[@id = 'elementid']/input[4]     获取div元素内的第四个输入元素
 * 使用XPath轴
 * XPath轴通过遍历可轻松识别其它元素的同级、子级或者父级来帮助定位复杂的Web元素
 * child - 选择参考节点的子节点   Syntax - XpathForReferenceNode/child::tag
 * parent - 选择参考节点的父节点  Syntax - XpathForReferenceNode/parent::tag
 * following - 选择参考节点之后的所有节点  Syntax - XpathForReferenceNode/following:tag
 * preceding - 选择参考节点之前的所有节点  Syntax - XpatbForReferenceNode/preceding::tag
 * ancestor - 选择参考节点之前的所有祖先元素   Syntax - XpathForReferenceNode/ancestor::tag
 */
public class Selenium07 {
    public static void main(String[] args) throws InterruptedException {
        //设置启动器路径
        System.setProperty("webdriver.chrome.driver","D:\\\\Enviroments\\\\geckodriver-v0.26.0-win64\\\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://tb.alicdn.com/snapshot/index.html");
        //获取文本文字为“收藏夹”的元素
        driver.findElement(By.xpath("//*[text() = '收藏夹']")).click();
        Thread.sleep(3000);
        driver.navigate().back();
       // Thread.sleep(10000);
        driver.findElement(By.xpath("//ul[@class='service-bd']/li[1]/a[1]")).click();
       // /html/body/div[5]/div[2]/div[1]/div/ul/a[1]/div[1]
    }
}
